#!/bin/bash

# USO: VlogY <comando> [-n=<lineas>] [-t=(i|w|e|s)] [-d=<dd/mm/aaaa>] [-g=<palabra>]

# Opciones:
# -n: Se muestran los resultados de aplicar los filtros en las ultimas n lineas

# Filtros:
# -t: Muestra los registros de tipo:
#	t=i: INFORMATIVO
# 	t=w: ADVERTENCIA
# 	t=e: ERROR
#	t=s: ERROR SEVERO
# -d: Muestra los regitros de la fecha indicada
# -g: Muestra las lineas que contienen la palabra ingresada

# Retornos:
# 0: Exito
# 1: Cantidad argumentos incorrecta
# 2: Comando a inspeccionar el log inexistente
# 3: Log del comando inexistente

# Verificacion cantidad de parametros
if [ $# -lt 1 ]; then
	echo "Cantidad de parametros incorrecta. Consulte Vlog -h"
	exit 1
fi

if [ $1 == "-h" ]; then
	clear
	echo "-----------------------------------------------------------------------------"
	echo 'USO: VlogY <comando> [-n=<lineas>] [-t=<i|w|e|s>] [-d=<dd/mm/aaaa>] [-g=<palabra>]

	Opciones:
	-n: Se muestran los resultados de aplicar los filtros en las ultimas n lineas

	Filtros:
	-t: Muestra los registros de tipo:
		t=i: INFORMATIVO
		t=w: ADVERTENCIA
		t=e: ERROR
		t=s: ERROR SEVERO
	-d: Muestra los regitros de la fecha indicada
	-g: Muestra las lineas que contienen la palabra ingresada

	Ejemplo de uso:
	$./VlogY DetectaY -n=10 -t=i -d=30/04/2013 -g=duplicado
	Muestra los regitros en las ultimas 10 lineas del log "DetectaY" de tipo "informativo", con fecha 30/04/2013 y que contengan la palabra "duplicado"'
	echo "-----------------------------------------------------------------------------"
	exit 0
fi

# Verificacion de comando logueable valido
if [ $1 != "InstalY" ] && [ $1 != "InicioY" ] && [ $1 != "DetectaY" ] && [ $1 != "Interprete" ] && [ $1 != "StartY" ] && [ $1 != "StopY" ] && [ $1 != "MoverY" ]; then
	echo "No existe el comando logueable \"$1\""	
	exit 2
fi

if [ $1 == "InstalY" ]; then
	# Configuracion especial para el log del InstalY
	LOG_FILE="$CONFDIR/InstalY.log"
else
	LOG_FILE="${LOGDIR}/${1}.${LOGEXT}"
fi

# Verificacion existencia del log
if [ ! -f "${LOG_FILE}" ]; then
	echo "El comando \"$1\" no posee ningun log"	
	exit 3
fi

# Aplicacion de filtros. Utilizo un log temporal
TEMP_LOG="${LOG_FILE}.temp"

if [ "${2:0:3}" == "-n=" ]; then
	LINEAS=${2:3}
	tail -$LINEAS "${LOG_FILE}" > "${TEMP_LOG}"
else
	cat "${LOG_FILE}" > "${TEMP_LOG}"
fi

for filtro in $@; do
	if [ "${filtro:0:3}" == "-t=" ]; then
		TIPOID=${filtro:3}
		# Verificacion tipo de severidad existente
		case "$TIPOID" in
			i)
				TIPO="INFORMATIVO";;
			w)
				TIPO="ADVERTENCIA";;
			e)
				TIPO="ERROR";;
			s)
				TIPO="ERROR SEVERO";;
			*)
				echo "No existe el tipo t=$TIPOID";;
		esac

		# Hago copia de archivos ya que en memoria no pude resolver la situacion. No se obtienen resultados deseados haciendo:
		# grep "$TIPO" "${TEMP_LOG}" > "${TEMP_LOG}"  ----> genera error de grep
		# cat "${TEMP_LOG}" | grep "$TIPO" > "${TEMP_LOG}"   -----> No se guardan los resultados del grep en $TEMP_LOG
		# echo $(cat "${TEMP_LOG}" | grep "$TIPO") > "${TEMP_LOG}"  ----> No se generan los saltos de linea en $TEMP_LOG
		cat "${TEMP_LOG}" > "${TEMP_LOG}.aux"
		grep "$TIPO" "${TEMP_LOG}.aux" > "${TEMP_LOG}"
		rm "${TEMP_LOG}.aux" 
	fi

	if [ "${filtro:0:3}" == "-d=" ]; then
		FECHA=${filtro:3}
		cat "${TEMP_LOG}" > "${TEMP_LOG}.aux"
		grep "$FECHA" "${TEMP_LOG}.aux" > "${TEMP_LOG}"
		rm "${TEMP_LOG}.aux" 
	fi

	if [ "${filtro:0:3}" == "-g=" ]; then
		PALABRA=${filtro:3}
		cat "${TEMP_LOG}" > "${TEMP_LOG}.aux"
		grep "$PALABRA" "${TEMP_LOG}.aux" > "${TEMP_LOG}"
		rm "${TEMP_LOG}.aux" 	
	fi
done

cat "${TEMP_LOG}"
rm "${TEMP_LOG}"

exit 0
